package com.ruoyi.system.service;

import java.util.List;
import com.ruoyi.system.domain.NoteFavorite;

/**
 * 笔记收藏记录Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface INoteFavoriteService 
{
    /**
     * 查询笔记收藏记录
     * 
     * @param favoriteId 笔记收藏记录主键
     * @return 笔记收藏记录
     */
    public NoteFavorite selectNoteFavoriteByFavoriteId(Long favoriteId);

    /**
     * 查询笔记收藏记录列表
     * 
     * @param noteFavorite 笔记收藏记录
     * @return 笔记收藏记录集合
     */
    public List<NoteFavorite> selectNoteFavoriteList(NoteFavorite noteFavorite);

    /**
     * 新增笔记收藏记录
     * 
     * @param noteFavorite 笔记收藏记录
     * @return 结果
     */
    public int insertNoteFavorite(NoteFavorite noteFavorite);

    /**
     * 修改笔记收藏记录
     * 
     * @param noteFavorite 笔记收藏记录
     * @return 结果
     */
    public int updateNoteFavorite(NoteFavorite noteFavorite);

    /**
     * 批量删除笔记收藏记录
     * 
     * @param favoriteIds 需要删除的笔记收藏记录主键集合
     * @return 结果
     */
    public int deleteNoteFavoriteByFavoriteIds(Long[] favoriteIds);

    /**
     * 删除笔记收藏记录信息
     * 
     * @param favoriteId 笔记收藏记录主键
     * @return 结果
     */
    public int deleteNoteFavoriteByFavoriteId(Long favoriteId);

    /**
     * 切换收藏状态
     * 
     * @param userId 用户ID
     * @param noteType 笔记类型
     * @param noteId 笔记ID
     * @param folderName 收藏夹名称
     * @return 结果（true=已收藏，false=已取消收藏）
     */
    public boolean toggleFavorite(Long userId, String noteType, Long noteId, String folderName);

    /**
     * 检查用户是否已收藏
     * 
     * @param userId 用户ID
     * @param noteType 笔记类型
     * @param noteId 笔记ID
     * @return 结果
     */
    public boolean isFavorited(Long userId, String noteType, Long noteId);

    /**
     * 统计笔记收藏数
     * 
     * @param noteType 笔记类型
     * @param noteId 笔记ID
     * @return 收藏数
     */
    public int countFavoritesByNote(String noteType, Long noteId);

    /**
     * 查询用户收藏的笔记列表
     * 
     * @param userId 用户ID
     * @return 收藏记录集合
     */
    public List<NoteFavorite> selectUserFavoriteNotes(Long userId);

    /**
     * 查询用户的收藏夹列表
     * 
     * @param userId 用户ID
     * @return 收藏夹名称列表
     */
    public List<String> selectUserFolders(Long userId);

    /**
     * 根据收藏夹查询收藏记录
     * 
     * @param userId 用户ID
     * @param folderName 收藏夹名称
     * @return 收藏记录集合
     */
    public List<NoteFavorite> selectFavoritesByFolder(Long userId, String folderName);
}